package cn.iocoder.yudao.module.api.member.point.enums;

import cn.hutool.core.util.EnumUtil;
import cn.iocoder.yudao.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Objects;

/**
 * 用户积分的业务类型枚举
 *
 * @author 芋道源码
 */
@AllArgsConstructor
@Getter
public enum MemberPointBizTypeEnum implements ArrayValuable<Integer> {

    REGISTER(0, "注册奖励", "注册奖励 {} 积分", true),
    SIGN(1, "签到奖励", "签到获得 {} 积分", true),
    ADMIN(2, "管理员修改", "管理员修改 {} 积分", true),

    ORDER_DEDUCT(11, "订单抵扣", "下单使用 {} 积分", false),
    ORDER_DEDUCT_CANCEL(12, "订单抵扣（整单取消）", "订单取消，退还 {} 积分", true),
    ORDER_DEDUCT_CANCEL_ITEM(13, "订单抵扣（单个退款）", "订单退款，退还 {} 积分", true),

    ORDER_GIVE(21, "订单奖励", "下单获得 {} 积分", true),
    ORDER_GIVE_CANCEL(22, "订单奖励（整单取消）", "订单取消，退还 {} 积分", false),
    ORDER_GIVE_CANCEL_ITEM(23, "订单奖励（单个退款）", "订单退款，扣除赠送的 {} 积分", false),

    BUY_VIP_GIVE(50, "购买会员赠送", "购买会员赠送 {} 积分", true),

    SOLD_PRODUCT_GIVE(60, "售出产品奖励", "售出产品获得 {} 积分", true),
    QRCODE_SCAN_GIVE(60, "二维码收款奖励", "二维码收款获得 {} 积分", true),

    OFFLINE_SCAN_ORDER_DEDUCT(70, "扫码付抵扣", "扫码付款给商家使用 {} 积分", false),
    ;

    /**
     * 类型
     */
    private final Integer type;
    /**
     * 名字
     */
    private final String name;
    /**
     * 描述
     */
    private final String description;
    /**
     * 是否为扣减积分
     */
    private final boolean add;

    @Override
    public Integer[] array() {
        return Arrays.stream(values()).map(MemberPointBizTypeEnum::getType).toArray(Integer[]::new);
    }

    public static MemberPointBizTypeEnum getByType(Integer type) {
        return EnumUtil.getBy(MemberPointBizTypeEnum.class,
                e -> Objects.equals(type, e.getType()));
    }

}
